function lik = tvp_zglike(parm,y,x,start,priorb0,priorv0)
% PURPOSE: returns -log likelihood function for tvp model with Zellner's g-prior
%          y(t) = X(t)*B(t) + e(t), e(t) = N(0,sige^2)
%          B(t) = B(t-1) + v(t),    v(t) = N[0,delta*sige*inv(X'X)]
%          (Zellner's g-prior)          
% -------------------------------------------------------
% USAGE: llike = tvp_zglike(parm,y,x,start,priorb0,priorv0)
% where: parm = a vector of parmaeters
%        parm(1) = sig epsilson
%        parm(2) = delta, Zellner's g-prior delta 
%        start   = # of observation to start at
%                  (default: 2*k+1)
%        priorb0   = (k+1) x 1 vector with prior b0          
%        priorv0   = (k+1)x(k+1) matrix with prior variance
%                  for sige, sigb  
% ----------------------------------------------------
% RETURNS: -log likelihood function value (a scalar)                  
% ----------------------------------------------------
% REFERENCES: Kim and Nelson (1999)
% State-Space Models with Regime Switching
% ----------------------------------------------------

% written by:
% James P. LeSage, Dept of Economics
% Texas State University-San Marcos
% 601 University Drive
% San Marcos, TX 78666
% jlesage@spatial-econometrics.com


sige = parm(1,1);
delta = parm(2,1);

[n k] = size(x);


if nargin == 4
priorv0 = eye(k)*1e+5;
priorb0 = zeros(k,1);
end;

xpxi = inv(x'*x);
sigb = sige*sige*delta*delta*xpxi;

f = eye(k);
rr = sige^2;
qq = sigb;
betall = priorb0;  % initial guess for betas
pll    = priorv0;  % prior uncertainty


lik = 0;
for iter = 1:n;
xt = x(iter,:);
yt = y(iter,1);

betatl = f*betall;
ptl = f*pll*f' + qq;
fcast = yt - xt*betatl;
ss = xt*ptl*xt' + rr;
betatt = betatl + (ptl*xt'/ss)*fcast;
ptt = (eye(k) - (ptl*xt'/ss)*xt)*ptl;
betall = betatt;
pll = ptt;

 if iter >= start
 lik = lik + 0.5*(log(2*pi*ss) + (fcast.^2)/ss);
 end;
end;

